home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / EGAVGA.SWG / 0101_VGA-EGA Multi Line Modes.pas < prev    next >
Pascal/Delphi Source File  |  1994-02-18  |  4KB  |  131 lines

  1. {
  2. Check out Hax #179 from PC Techniques vol.4 no.6 Feb/Mar issue (page 70),
  3. (coincidently written by me), where a small program is presented that'll not
  4. only detect whether a VGA adapter is installed, but is also capable of putting
  5. the screen in 80x12, 80x14, 80x21, 80x25, 80x28, 80x43 or 80x50 mode...}
  6.  
  7. {$IFDEF VER70}
  8. {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S+,T-,V-,X-}
  9. {$ELSE}
  10. {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S+,V-,X-}
  11. {$ENDIF}
  12. {$M 1024,0,0}
  13. {
  14.   VGA 3.0
  15.   Borland Pascal (Objects) 7.01
  16.   Copr. (c) 7-17-1993 DwarFools & Consultancy drs. Robert E. Swart
  17.                       P.O. box 799
  18.                       5702 NP  Helmond
  19.                       The Netherlands
  20.  
  21.   Code size: 3248 Bytes
  22.   Data size:  676 Bytes
  23. }
  24. Const
  25.   VGAInside: Boolean = False; { Assume no VGA-card is installed }
  26.  
  27. var VGALines,i: Integer;
  28.  
  29.     procedure Lines200;
  30.     { Set 200 scanlines on VGA display }
  31.     InLine(
  32.       $B8/$03/$00/  {  mov   AX,$0003  }
  33.       $CD/$10/      {  int   $10       }
  34.       $B8/$00/$12/  {  mov   AX,$1200  }
  35.       $B3/$30/      {  mov   BL,$30    }
  36.       $CD/$10);     {  int   $10       }
  37.  
  38.     procedure Lines350;
  39.     { Set 350 scanlines on VGA display }
  40.     InLine(
  41.       $B8/$03/$00/  {  mov   AX,$0003  }
  42.       $CD/$10/      {  int   $10       }
  43.       $B8/$01/$12/  {  mov   AX,$1201  }
  44.       $B3/$30/      {  mov   BL,$30    }
  45.       $CD/$10);     {  int   $10       }
  46.  
  47.     procedure Lines400;
  48.     { Set 400 scanlines on VGA display }
  49.     InLine(
  50.       $B8/$03/$00/  {  mov   AX,$0003  }
  51.       $CD/$10/      {  int   $10       }
  52.       $B8/$02/$12/  {  mov   AX,$1202  }
  53.       $B3/$30/      {  mov   BL,$30    }
  54.       $CD/$10);     {  int   $10       }
  55.  
  56.     procedure Font8x8;
  57.     { Set 8x8 CGA-font on VGA display. }
  58.     InLine(
  59.       $B8/$03/$00/  {  mov   AX,$0003  }
  60.       $CD/$10/      {  int   $10       }
  61.       $B8/$12/$11/  {  mov   AX,$1112  }
  62.       $B3/$00/      {  mov   BL,0      }
  63.       $CD/$10);     {  int   $10       }
  64.  
  65.     procedure Font8x14;
  66.     { Set 8x14 EGA-font on VGA display }
  67.     InLine(
  68.       $B8/$03/$00/  {  mov   AX,$0003  }
  69.       $CD/$10/      {  int   $10       }
  70.       $B8/$11/$11/  {  mov   AX,$1111  }
  71.       $B3/$00/      {  mov   BL,0      }
  72.       $CD/$10);     {  int   $10       }
  73.  
  74.     procedure Font8x16;
  75.     { Set 8x16 VGA-font on VGA display }
  76.     InLine(
  77.       $B8/$03/$00/  {  mov   AX,$0003  }
  78.       $CD/$10/      {  int   $10       }
  79.       $B8/$14/$11/  {  mov   AX,$1114  }
  80.       $B3/$00/      {  mov   BL,0      }
  81.       $CD/$10);     {  int   $10       }
  82.  
  83.  
  84. begin
  85.   writeln('VGALines 3.0 (c) 1993 DwarFools & Consultancy' +
  86.                          ', by drs. Robert E. Swart.'#13#10);
  87.   ASM { Detect VGA display }
  88.         mov   AX,$0F00
  89.         int   $10
  90.         cmp   AL,$03   { TextMode = CO80 }
  91.         jne   @End
  92.         mov   AX,$1C00
  93.         mov   CX,$0007
  94.         int   $10
  95.         cmp   AL,$1C
  96.         jne   @End
  97.         mov   VGAInside,True { VGA display installed }
  98.   @End:
  99.   end { VGA display };
  100.  
  101.   Val(ParamStr(1),VGALines,i);
  102.  
  103.   if not ((ParamCount >= 1) and VGAInside and (i = 0) and
  104.           (VGALines in [12,14,21,25,28,43,50])) then
  105.   begin
  106.     writeln('Usage: VGALines #Lines [test]'#13#10);
  107.     writeln('Where #Lines is any of [12,14,21,25,28,43,50]':52);
  108.     if not VGAInside then
  109.       writeln(#13#10'Error: VGA display required!');
  110.     Halt
  111.   end;
  112.  
  113.   case VGALines of { first set scan-lines }
  114.   12,14: Lines200;
  115.   21,43: Lines350;
  116.     else Lines400
  117.   end;
  118.  
  119.   case VGALines of { then select the font }
  120.   43,50: Font8x8;
  121.   14,28: Font8x14;
  122.     else Font8x16
  123.   end;
  124.  
  125.   if ParamCount > 1 then { test parameter is used }
  126.   begin
  127.     for i:=0 to VGALines-1 do writeln(i);
  128.     write(VGALines,' lines set.')
  129.   end
  130. end.
  131.